#!usr/bin/env python3
# -*- coding: utf-8 -*-

# 第七章 函数 2017年6月12日16:37:05

#接受任意参数和关键字参数的函数
def fun1(*arg,**kwarg):
    print(arg) # 是一个元组 tuple
    print(kwarg) # 是一个保存关键字参数的字典dict

fun1(1,2,"I am arg y",age=21,name="kity")
    
#给函数参数添加元信息


def add(x:int,y:int)->int: #可以指明参数的数据类型，返回的数据类型 不过这些只是给开发看的 Python解析器是不会强制检测的
    return (x+y)

print(add(10,20)) # 按照元信息数据类型 正常传参数 可以运行
print(add("10","20")) # 不按照元信息数据类型 传参数 也可以运行

print(add.__annotations__) # 函数的元信息储存在该属性中

#返回多个值的函数

def mutilBackFn():
    return 1,2,3

ret = mutilBackFn() #实际上是返回一个tuple
print(type(ret)) 
a,b,c = ret #解包元组到变量

#题外话，元组（tuple）的创建其实是通过逗号创建 并非括号
tpl = (1,2) #这是一个元组
tpl1 = 1.2 #这其实也是一个元组


obj = object() 
#obj.age = 31  这里会报错 Python中的object是没有任何属性和任何方法，没有实例字典，并且不能动态创建属性

#匿名函数和内联函数

#lambda 函数

names = ["Boy","Ela","emy","china","Fancy"]

names = sorted(names,key=lambda name:str(name).lower())
print(names)

# 2017年6月12日17:51:12  第七章的浏览完 有时间需要重新看